////动态（堆）内存分配
//#include <iostream>
//#include <cstdlib>
//
//using namespace std;
//
//int main(void) {
//    int *pm = (int *) malloc(4);
//    cout << "*pm=" << *pm << endl;//初始值为0
//    free(pm);//当这行代码执行完毕后，pm指向的对内存被释放，进而pm变为野指针
//    pm = NULL;
//    free(pm);//给free传递的为野指针，释放野指针后果很严重，释放空指针是安全的
//
//    int *pn = new int(100);//new更简洁，能赋初始值
//    cout << "*pn=" << *pn << endl;
//    delete pn;//当这行代码执行完毕后，pn指向的堆内存被释放，进而pn变为野指针
//    pn = NULL;
//    delete pn;//给delete传递的为野指针，释放野指针的后果很严重,释放空指针是安全的
//    int *pi = new int[4]{10, 20, 30, 40};//以数组方式来new,返回的永远是第一个元素的地址
//    for (int i = 0; i < 4; i++) {
//        cout << pi[i] << ' ';
//    }
//    cout << endl;
//    delete[] pi;
//
//    int (*p)[4] = new int[3][4];//以数组方式来new,返回的永远是第一个元素的地址
//    delete[] p;
//
//    new int[0xFFFFFFFFFF];
//    return 0;2
//}
